/**************************************************************************//**
 * @item     CosyOS Kernel
 * @file     os_def.h
 * @brief    系统定义
 * @author   迟凯峰
 * @version  V3.3.3
 * @date     2023.07.31
 ******************************************************************************/

#ifndef __OS_DEF_H
#define __OS_DEF_H

/*------------------------------------------------------------------------------
 * 系统API */

#define	sDefBitField(v)     volatile u8 v:1
#define	sDefVoidBits(n)     volatile u8  :n
#define	sDefStr(s)          #s
#define	sReDefStr(s)        sDefStr(s)
#define	sCatStr(s1, s2)     s1##s2
#define	sReCatStr(s1, s2)   sCatStr(s1, s2)

/*------------------------------------------------------------------------------
 * 常量定义 */

#define false   0
#define true    1

/*
 * 任务相关
 */

#define __TASKQUEUEMAXLEN__ 255    // 任务队列最大长度

/* 任务状态 */
#define	__READY__           0x00   // 就绪
#define	__FLOATING__        0x01   // 浮动
#define	__BLOCKED__         0x02   // 阻塞
#define __OVERTIME__        0x04   // 超时
#define	__SUSPENDED__       0x08   // 挂起
#define	__STOPPED__         0x10   // 停止
#define	__STOPPED_TSOF__    0x30   // 任务栈溢出停止
#define __STOPPED_TSRF__    0x50   // 任务栈重分配失败停止
#define	__DELETED__         0x80   // 已删除/未启动

/* 恢复任务 */
#define	__RESUME__          0xF7

/* 阻塞事件类型 */
#define	__BINARY__          0x10 // 二值信号量阻塞（获取/等待）
#define	__MUTEX__           0x20 // 互斥信号量阻塞（获取）
#define	__SEMAPHORE__       0x30 // 计数信号量阻塞（获取）
#define __FLAGGROUP__       0x40 // 等待标志组阻塞
#define __RECV_FETION__     0x50 // 接收飞信阻塞
#define	__RECV_DM__         0x60 // 接收私信阻塞
#define	__RECV_MAIL__       0x70 // 接收邮件阻塞
#define	__RECV_MSG__        0x80 // 接收消息阻塞
#define	__DELAY__           0xF0 // 延时阻塞



/*
 * Setup
 */

#define	__NO__              0
#define	__YES__             1
#define __DISABLED__        0
#define __ENABLED__         1
#define __STATIC__          0
#define __BALANCE__         1
#define __DYNAMIC__         2
#define __MSP__             0
#define __MSP_PSP__         1
#define	__STCLK__           0
#define	__FCLK__            1
#define __STANDARD__        0
#define __INTELLIGENT__     0
#define	__PERFORMANCE__     1
#define __C89__             0
#define __C99__             1
#define __ARM__             1
#define __MSGQUE_FIFO__     0
#define __MSGQUE_LIFO__     1



/*
 * Taskmgr
 */

/* up speed: unit is ms */
#define	__FAST__            500
#define	__MIDDLE__          1000
#define	__SLOW__            2000

/* LEN */
#define	__TPLLEN__          6
#define __STALEN__          6
#define	__CPULEN__          9



/*
 * SVID（服务ID，中断异步服务-系统专用ID）
 */

#define __SVID_RESTASK__    0x00
#define __SVID_SUSTASK__    0x01
#define __SVID_DELTASK__    0x02
#define __SVID_SETTPL__     0x03
#define __SVID_SETDLY__     0x04
#define __SVID_CLRDLY__     0x05
#define __SVID_TIMINT__     0x06
#define __SVID_TIMQRY__     0x07
#define __SVID_WRITEBIN__   0x08
#define __SVID_FREESEM__    0x09
#define __SVID_WRITEVAR__   0x0A
#define __SVID_SELFOPE__    0x0B
#define __SVID_SENDFETION__ 0x0C
#define __SVID_SENDMAIL__   0x0D
#define __SVID_SENDMSG__    0x0E
#define __SVID_WRITEGRP__   0x0F
#define __SVID_END__        0x10



/*
 * ECODE（错误码）
 */

#define ECODE_NOERR                0   // 无错误
#define ECODE_OVERFLOW_MSGQUEUE    1   // 消息队列溢出
#define ECODE_OVERFLOW_TASKQUEUE   2   // 任务队列溢出
#define ECODE_OVERFLOW_TASKSTACK   3   // 任务栈溢出
#define ECODE_MALLOCFAIL_MSGNODE   4   // 消息节点内存分配失败
#define ECODE_MALLOCFAIL_TASKNODE  5   // 任务节点内存分配失败
#define ECODE_MALLOCFAIL_TASKSTACK 6   // 任务栈内存分配失败
#define ECODE_TPLUNCHANGED         7   // 任务优先级未改变
#define ECODE_TASKUNSUSPENDED      8   // 任务未挂起
#define ECODE_TASKSUSPENDED        9   // 任务已挂起
#define ECODE_TASKNOTREADY         10  // 任务未就绪
#define ECODE_TASKSTOPPED          11  // 任务已停止
#define ECODE_TASKNOTSTARTED       12  // 任务未启动/已删除
#define ECODE_MUTEXISFREE          101 // 互斥信号量已释放
#define ECODE_NOPERMISSION         254 // 无权限
#define ECODE_DONOTKNOW            255 // 未知错误



#endif
